package cl.whyem.test.cert.ocpjp6;

import java.util.LinkedHashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

public class InitializationOrder {

    public static void main(String[] args) {
        new InitMembersOfClass();
        new InitMembersOfClass(7);
        
        Set set = new TreeSet();
        set.add(2);
        set.add(1);
        System.out.println(set);
    }

}

class ClasePadre implements Comparable {
    
    {
        System.out.println("1st instance padre");
    }

    static{
        System.out.println("1st static padre");
    }
    
    ClasePadre() {
        System.out.println("inicio clase padre");
    }

    public int compareTo(Object o) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

class InitMembersOfClass extends ClasePadre {

    static {
        System.out.println("1st static init");
    }

    {
        // los bloques son los segundos en ser ejecutados y
        // se ejecutan de acuerdo al orden en que se encuentran en la clase.
        System.out.println("1st instance init::");
    }

    {
        System.out.println("2nd instance init");
    }

    static {//
        System.out.println("2nd static init");
    }

    InitMembersOfClass(int x) {
        System.out.println("1-arg const");
    }

    InitMembersOfClass() {
        System.out.println("no-arg const");
    }

}
